package org.bcos.contract.source;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;
import org.bcos.channel.client.TransactionSucCallback;
import org.bcos.web3j.abi.EventEncoder;
import org.bcos.web3j.abi.EventValues;
import org.bcos.web3j.abi.FunctionEncoder;
import org.bcos.web3j.abi.TypeReference;
import org.bcos.web3j.abi.datatypes.Address;
import org.bcos.web3j.abi.datatypes.Event;
import org.bcos.web3j.abi.datatypes.Function;
import org.bcos.web3j.abi.datatypes.StaticArray;
import org.bcos.web3j.abi.datatypes.Type;
import org.bcos.web3j.abi.datatypes.Utf8String;
import org.bcos.web3j.abi.datatypes.generated.Bytes1;
import org.bcos.web3j.abi.datatypes.generated.Bytes32;
import org.bcos.web3j.abi.datatypes.generated.Uint256;
import org.bcos.web3j.crypto.Credentials;
import org.bcos.web3j.crypto.EncryptType;
import org.bcos.web3j.protocol.Web3j;
import org.bcos.web3j.protocol.core.DefaultBlockParameter;
import org.bcos.web3j.protocol.core.methods.request.EthFilter;
import org.bcos.web3j.protocol.core.methods.response.Log;
import org.bcos.web3j.protocol.core.methods.response.TransactionReceipt;
import org.bcos.web3j.tx.Contract;
import org.bcos.web3j.tx.TransactionManager;
import rx.Observable;
import rx.functions.Func1;

/**
 * Auto generated code.<br>
 * <strong>Do not modify!</strong><br>
 * Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>, or {@link org.bcos.web3j.codegen.SolidityFunctionWrapperGenerator} to update.
 *
 * <p>Generated with web3j version none.
 */
public final class CAAction extends Contract {
    private static String BINARY = "6060604052341561000c57fe5b604051602080611ae1833981016040528080519060200190919050505b5b505b611aa68061003b6000396000f300606060405236156100a2576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063045ccf7b146100a45780633a96fdd71461016f57806346bdca9a14610220578063693ec85e146102d55780636b2fafa9146104b1578063749c190b1461055857806380599e4b1461057e5780639201de55146105f0578063cfb519281461069b578063f034d6b114610711575bfe5b34156100ac57fe5b6100e660048080610800019060408060200260405190810160405280929190826040602002808284378201915050505050919050506107f1565b6040518080602001828103825283818151815260200191508051906020019080838360008314610135575b80518252602083111561013557602082019150602081019050602083039250610111565b505050905090810190601f1680156101615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017757fe5b61020a600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506109eb565b6040518082815260200191505060405180910390f35b341561022857fe5b6102bb600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cb8565b604051808215151515815260200191505060405180910390f35b34156102dd57fe5b61032d600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cd0565b6040518080602001806020018060200185815260200184810384528881815181526020019150805190602001908083836000831461038a575b80518252602083111561038a57602082019150602081019050602083039250610366565b505050905090810190601f1680156103b65780820380516001836020036101000a031916815260200191505b508481038352878181518152602001915080519060200190808383600083146103fe575b8051825260208311156103fe576020820191506020810190506020830392506103da565b505050905090810190601f16801561042a5780820380516001836020036101000a031916815260200191505b50848103825286818151815260200191508051906020019080838360008314610472575b8051825260208311156104725760208201915060208101905060208303925061044e565b505050905090810190601f16801561049e5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b34156104b957fe5b6104cf600480803590602001909190505061107f565b604051808060200182810382528381815181526020019150805190602001908083836000831461051e575b80518252602083111561051e576020820191506020810190506020830392506104fa565b505050905090810190601f16801561054a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561056057fe5b610568611146565b6040518082815260200191505060405180910390f35b341561058657fe5b6105d6600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611154565b604051808215151515815260200191505060405180910390f35b34156105f857fe5b610612600480803560001916906020019091905050611386565b6040518080602001828103825283818151815260200191508051906020019080838360008314610661575b8051825260208311156106615760208201915060208101905060208303925061063d565b505050905090810190601f16801561068d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156106a357fe5b6106f3600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611571565b60405180826000191660001916815260200191505060405180910390f35b341561071957fe5b6107ef600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506115a2565b005b6107f96117da565b6108016117ee565b6000600061080d6117ee565b604060405180591061081c5750595b908082528060200260200182016040525b50935060009250600091505b604082101561090a5760007f010000000000000000000000000000000000000000000000000000000000000002868360408110151561087457fe5b60200201517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156108fc5785826040811015156108b057fe5b602002015184848151811015156108c357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082806001019350505b5b8180600101925050610839565b826040518059106109185750595b908082528060200260200182016040525b509050600091505b828210156109de57838281518110151561094757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000281838151811015156109a057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8180600101925050610931565b8094505b50505050919050565b60006109f56117ee565b6109fd6117ee565b60006000869350859250835191508183511015610a1957825191505b600090505b81811015610c5e578281815181101515610a3457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610aaf57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015610b4a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610cae565b8281815181101515610b5857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610bd357fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161115610c4f5760019450610cae565b5b5b8080600101915050610a1e565b825184511015610c90577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610cae565b825184511115610ca35760019450610cae565b60009450610cae565b5b5b5050505092915050565b60006000610cc684846109eb565b1490505b92915050565b610cd86117da565b610ce06117da565b610ce86117da565b60006000856040518082805190602001908083835b60208310610d205780518252602082019150602081019050602083039250610cfd565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000016000866040518082805190602001908083835b60208310610d8c5780518252602082019150602081019050602083039250610d69565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016000876040518082805190602001908083835b60208310610df85780518252602082019150602081019050602083039250610dd5565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206002016000886040518082805190602001908083835b60208310610e645780518252602082019150602081019050602083039250610e41565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030154838054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f305780601f10610f0557610100808354040283529160200191610f30565b820191906000526020600020905b815481529060010190602001808311610f1357829003601f168201915b50505050509350828054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fcc5780601f10610fa157610100808354040283529160200191610fcc565b820191906000526020600020905b815481529060010190602001808311610faf57829003601f168201915b50505050509250818054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110685780601f1061103d57610100808354040283529160200191611068565b820191906000526020600020905b81548152906001019060200180831161104b57829003601f168201915b5050505050915093509350935093505b9193509193565b6110876117da565b60018281548110151561109657fe5b906000526020600020900160005b508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111395780601f1061110e57610100808354040283529160200191611139565b820191906000526020600020905b81548152906001019060200180831161111c57829003601f168201915b505050505090505b919050565b600060018054905090505b90565b60006000600060009150600090505b60018054905081101561137a576112308460018381548110151561118357fe5b906000526020600020900160005b508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112265780601f106111fb57610100808354040283529160200191611226565b820191906000526020600020905b81548152906001019060200180831161120957829003601f168201915b5050505050610cb8565b1561136c57600160018054905011156112a857600160016001805490500381548110151561125a57fe5b906000526020600020900160005b5060018281548110151561127857fe5b906000526020600020900160005b5090805460018160011615610100020316600290046112a6929190611802565b505b60018054809190600190036112bd9190611889565b506000846040518082805190602001908083835b602083106112f457805182526020820191506020810190506020830392506112d1565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600060008201600061133991906118b5565b60018201600061134991906118b5565b60028201600061135991906118b5565b600382016000905550506001925061137f565b5b8080600101915050611163565b600092505b5050919050565b61138e6117da565b6113966117ee565b6000600060006113a46117ee565b60206040518059106113b35750595b908082528060200260200182016040525b50945060009350600092505b602083101561148f578260080260020a876001900402600102915060007f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156114815781858581518110151561144857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450505b5b82806001019350506113d0565b8360405180591061149d5750595b908082528060200260200182016040525b509050600092505b838310156115635784838151811015156114cc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818481518110151561152557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b82806001019350506114b6565b8095505b5050505050919050565b600061157b6117ee565b829050600081511415611594576000600102915061159c565b602083015191505b50919050565b6000600060009150600090505b6001805490508110156116985761167c856001838154811015156115cf57fe5b906000526020600020900160005b508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116725780601f1061164757610100808354040283529160200191611672565b820191906000526020600020905b81548152906001019060200180831161165557829003601f168201915b5050505050610cb8565b1561168a5760019150611698565b5b80806001019150506115af565b8115156000151514156117d257600180548060010182816116b991906118fd565b916000526020600020900160005b87909190915090805190602001906116e0929190611929565b5050608060405190810160405280868152602001858152602001848152602001438152506000866040518082805190602001908083835b6020831061173a5780518252602082019150602081019050602083039250611717565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000190805190602001906117899291906119a9565b5060208201518160010190805190602001906117a69291906119a9565b5060408201518160020190805190602001906117c39291906119a9565b50606082015181600301559050505b5b5050505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061183b5780548555611878565b8280016001018555821561187857600052602060002091601f016020900482015b8281111561187757825482559160010191906001019061185c565b5b5090506118859190611a29565b5090565b8154818355818115116118b0578183600052602060002091820191016118af9190611a4e565b5b505050565b50805460018160011615610100020316600290046000825580601f106118db57506118fa565b601f0160209004906000526020600020908101906118f99190611a29565b5b50565b815481835581811511611924578183600052602060002091820191016119239190611a4e565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061196a57805160ff1916838001178555611998565b82800160010185558215611998579182015b8281111561199757825182559160200191906001019061197c565b5b5090506119a59190611a29565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119ea57805160ff1916838001178555611a18565b82800160010185558215611a18579182015b82811115611a175782518255916020019190600101906119fc565b5b509050611a259190611a29565b5090565b611a4b91905b80821115611a47576000816000905550600101611a2f565b5090565b90565b611a7791905b80821115611a735760008181611a6a91906118b5565b50600101611a54565b5090565b905600a165627a7a72305820d30ce9548da48fb4381e51638adf16168b52cd904fb22d64f258afb195a42e830029";

    public static final String ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"x\",\"type\":\"bytes1[64]\"}],\"name\":\"byte64ToString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_a\",\"type\":\"string\"},{\"name\":\"_b\",\"type\":\"string\"}],\"name\":\"compare\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_a\",\"type\":\"string\"},{\"name\":\"_b\",\"type\":\"string\"}],\"name\":\"equal\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_serial\",\"type\":\"string\"}],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getHash\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getHashsLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_serial\",\"type\":\"string\"}],\"name\":\"remove\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"x\",\"type\":\"bytes32\"}],\"name\":\"bytes32ToString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"source\",\"type\":\"string\"}],\"name\":\"stringToBytes32\",\"outputs\":[{\"name\":\"result\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_serial\",\"type\":\"string\"},{\"name\":\"_pubkey\",\"type\":\"string\"},{\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"add\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_systemproxy\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"code\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"msg\",\"type\":\"string\"}],\"name\":\"LogMessage\",\"type\":\"event\"}]";

    private static String GUOMI_BINARY = "6060604052341561000c57fe5b604051602080611ae1833981016040528080519060200190919050505b5b505b611aa68061003b6000396000f300606060405236156100a2576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806311408349146100a45780631e23be27146100ca5780632e77b5fc146101aa578063446a1fe11461025b5780634ef4f309146103065780636a4cffdf1461037c5780637b1b8e031461042357806386b733f9146105ff578063adc48fa114610671578063b372efc314610726575bfe5b34156100ac57fe5b6100b46107f1565b6040518082815260200191505060405180910390f35b34156100d257fe5b6101a8600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506107ff565b005b34156101b257fe5b610245600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610a37565b6040518082815260200191505060405180910390f35b341561026357fe5b61027d600480803560001916906020019091905050610d04565b60405180806020018281038252838181518152602001915080519060200190808383600083146102cc575b8051825260208311156102cc576020820191506020810190506020830392506102a8565b505050905090810190601f1680156102f85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030e57fe5b61035e600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610eef565b60405180826000191660001916815260200191505060405180910390f35b341561038457fe5b61039a6004808035906020019091905050610f20565b60405180806020018281038252838181518152602001915080519060200190808383600083146103e9575b8051825260208311156103e9576020820191506020810190506020830392506103c5565b505050905090810190601f1680156104155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042b57fe5b61047b600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610fe7565b604051808060200180602001806020018581526020018481038452888181518152602001915080519060200190808383600083146104d8575b8051825260208311156104d8576020820191506020810190506020830392506104b4565b505050905090810190601f1680156105045780820380516001836020036101000a031916815260200191505b5084810383528781815181526020019150805190602001908083836000831461054c575b80518252602083111561054c57602082019150602081019050602083039250610528565b505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b508481038252868181518152602001915080519060200190808383600083146105c0575b8051825260208311156105c05760208201915060208101905060208303925061059c565b505050905090810190601f1680156105ec5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b341561060757fe5b610657600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611396565b604051808215151515815260200191505060405180910390f35b341561067957fe5b61070c600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506115c8565b604051808215151515815260200191505060405180910390f35b341561072e57fe5b61076860048080610800019060408060200260405190810160405280929190826040602002808284378201915050505050919050506115e0565b60405180806020018281038252838181518152602001915080519060200190808383600083146107b7575b8051825260208311156107b757602082019150602081019050602083039250610793565b505050905090810190601f1680156107e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600060018054905090505b90565b6000600060009150600090505b6001805490508110156108f5576108d98560018381548110151561082c57fe5b906000526020600020900160005b508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108cf5780601f106108a4576101008083540402835291602001916108cf565b820191906000526020600020905b8154815290600101906020018083116108b257829003601f168201915b50505050506115c8565b156108e757600191506108f5565b5b808060010191505061080c565b811515600015151415610a2f576001805480600101828161091691906117da565b916000526020600020900160005b879091909150908051906020019061093d929190611806565b5050608060405190810160405280868152602001858152602001848152602001438152506000866040518082805190602001908083835b602083106109975780518252602082019150602081019050602083039250610974565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060008201518160000190805190602001906109e6929190611886565b506020820151816001019080519060200190610a03929190611886565b506040820151816002019080519060200190610a20929190611886565b50606082015181600301559050505b5b5050505050565b6000610a41611906565b610a49611906565b60006000869350859250835191508183511015610a6557825191505b600090505b81811015610caa578281815181101515610a8057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610afb57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161015610b96577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610cfa565b8281815181101515610ba457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181101515610c1f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161115610c9b5760019450610cfa565b5b5b8080600101915050610a6a565b825184511015610cdc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9450610cfa565b825184511115610cef5760019450610cfa565b60009450610cfa565b5b5b5050505092915050565b610d0c61191a565b610d14611906565b600060006000610d22611906565b6020604051805910610d315750595b908082528060200260200182016040525b50945060009350600092505b6020831015610e0d578260080260020a876001900402600102915060007f010000000000000000000000000000000000000000000000000000000000000002827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515610dff57818585815181101515610dc657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450505b5b8280600101935050610d4e565b83604051805910610e1b5750595b908082528060200260200182016040525b509050600092505b83831015610ee1578483815181101515610e4a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028184815181101515610ea357fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8280600101935050610e34565b8095505b5050505050919050565b6000610ef9611906565b829050600081511415610f125760006001029150610f1a565b602083015191505b50919050565b610f2861191a565b600182815481101515610f3757fe5b906000526020600020900160005b508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fda5780601f10610faf57610100808354040283529160200191610fda565b820191906000526020600020905b815481529060010190602001808311610fbd57829003601f168201915b505050505090505b919050565b610fef61191a565b610ff761191a565b610fff61191a565b60006000856040518082805190602001908083835b602083106110375780518252602082019150602081019050602083039250611014565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000016000866040518082805190602001908083835b602083106110a35780518252602082019150602081019050602083039250611080565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016000876040518082805190602001908083835b6020831061110f57805182526020820191506020810190506020830392506110ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206002016000886040518082805190602001908083835b6020831061117b5780518252602082019150602081019050602083039250611158565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060030154838054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112475780601f1061121c57610100808354040283529160200191611247565b820191906000526020600020905b81548152906001019060200180831161122a57829003601f168201915b50505050509350828054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112e35780601f106112b8576101008083540402835291602001916112e3565b820191906000526020600020905b8154815290600101906020018083116112c657829003601f168201915b50505050509250818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561137f5780601f106113545761010080835404028352916020019161137f565b820191906000526020600020905b81548152906001019060200180831161136257829003601f168201915b5050505050915093509350935093505b9193509193565b60006000600060009150600090505b6001805490508110156115bc57611472846001838154811015156113c557fe5b906000526020600020900160005b508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114685780601f1061143d57610100808354040283529160200191611468565b820191906000526020600020905b81548152906001019060200180831161144b57829003601f168201915b50505050506115c8565b156115ae57600160018054905011156114ea57600160016001805490500381548110151561149c57fe5b906000526020600020900160005b506001828154811015156114ba57fe5b906000526020600020900160005b5090805460018160011615610100020316600290046114e892919061192e565b505b60018054809190600190036114ff91906119b5565b506000846040518082805190602001908083835b602083106115365780518252602082019150602081019050602083039250611513565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600060008201600061157b91906119e1565b60018201600061158b91906119e1565b60028201600061159b91906119e1565b60038201600090555050600192506115c1565b5b80806001019150506113a5565b600092505b5050919050565b600060006115d68484610a37565b1490505b92915050565b6115e861191a565b6115f0611906565b600060006115fc611906565b604060405180591061160b5750595b908082528060200260200182016040525b50935060009250600091505b60408210156116f95760007f010000000000000000000000000000000000000000000000000000000000000002868360408110151561166357fe5b60200201517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415156116eb57858260408110151561169f57fe5b602002015184848151811015156116b257fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082806001019350505b5b8180600101925050611628565b826040518059106117075750595b908082528060200260200182016040525b509050600091505b828210156117cd57838281518110151561173657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002818381518110151561178f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8180600101925050611720565b8094505b50505050919050565b815481835581811511611801578183600052602060002091820191016118009190611a29565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061184757805160ff1916838001178555611875565b82800160010185558215611875579182015b82811115611874578251825591602001919060010190611859565b5b5090506118829190611a55565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106118c757805160ff19168380011785556118f5565b828001600101855582156118f5579182015b828111156118f45782518255916020019190600101906118d9565b5b5090506119029190611a55565b5090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061196757805485556119a4565b828001600101855582156119a457600052602060002091601f016020900482015b828111156119a3578254825591600101919060010190611988565b5b5090506119b19190611a55565b5090565b8154818355818115116119dc578183600052602060002091820191016119db9190611a29565b5b505050565b50805460018160011615610100020316600290046000825580601f10611a075750611a26565b601f016020900490600052602060002090810190611a259190611a55565b5b50565b611a5291905b80821115611a4e5760008181611a4591906119e1565b50600101611a2f565b5090565b90565b611a7791905b80821115611a73576000816000905550600101611a5b565b5090565b905600a165627a7a72305820d4226c7314dcd899072bb7ebc15a178de256c51e22aea463cd1f9bd184d28cee0029";

    private CAAction(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, Boolean isInitByName) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit, isInitByName);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    private CAAction(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, Boolean isInitByName) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit, isInitByName);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    private CAAction(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit, false);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    private CAAction(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit, false);
        if(EncryptType.encryptType == 1) super.setContractBinary(GUOMI_BINARY);
    }

    public static List<LogMessageEventResponse> getLogMessageEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("LogMessage", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<LogMessageEventResponse> responses = new ArrayList<LogMessageEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            LogMessageEventResponse typedResponse = new LogMessageEventResponse();
            typedResponse.addr = (Address) eventValues.getNonIndexedValues().get(0);
            typedResponse.code = (Uint256) eventValues.getNonIndexedValues().get(1);
            typedResponse.msg = (Utf8String) eventValues.getNonIndexedValues().get(2);
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<LogMessageEventResponse> logMessageEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("LogMessage", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, LogMessageEventResponse>() {
            @Override
            public LogMessageEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                LogMessageEventResponse typedResponse = new LogMessageEventResponse();
                typedResponse.addr = (Address) eventValues.getNonIndexedValues().get(0);
                typedResponse.code = (Uint256) eventValues.getNonIndexedValues().get(1);
                typedResponse.msg = (Utf8String) eventValues.getNonIndexedValues().get(2);
                return typedResponse;
            }
        });
    }

    public Future<Utf8String> byte64ToString(StaticArray<Bytes1> x) {
        Function function = new Function("byte64ToString", 
                Arrays.<Type>asList(x), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> compare(Utf8String _a, Utf8String _b) {
        Function function = new Function("compare", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void compare(Utf8String _a, Utf8String _b, TransactionSucCallback callback) {
        Function function = new Function("compare", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<TransactionReceipt> equal(Utf8String _a, Utf8String _b) {
        Function function = new Function("equal", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void equal(Utf8String _a, Utf8String _b, TransactionSucCallback callback) {
        Function function = new Function("equal", Arrays.<Type>asList(_a, _b), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<List<Type>> get(Utf8String _serial) {
        Function function = new Function("get", 
                Arrays.<Type>asList(_serial), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}));
        return executeCallMultipleValueReturnAsync(function);
    }

    public Future<Utf8String> getHash(Uint256 _index) {
        Function function = new Function("getHash", 
                Arrays.<Type>asList(_index), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<Uint256> getHashsLength() {
        Function function = new Function("getHashsLength", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> remove(Utf8String _serial) {
        Function function = new Function("remove", Arrays.<Type>asList(_serial), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void remove(Utf8String _serial, TransactionSucCallback callback) {
        Function function = new Function("remove", Arrays.<Type>asList(_serial), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<Utf8String> bytes32ToString(Bytes32 x) {
        Function function = new Function("bytes32ToString", 
                Arrays.<Type>asList(x), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

    public Future<TransactionReceipt> stringToBytes32(Utf8String source) {
        Function function = new Function("stringToBytes32", Arrays.<Type>asList(source), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void stringToBytes32(Utf8String source, TransactionSucCallback callback) {
        Function function = new Function("stringToBytes32", Arrays.<Type>asList(source), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public Future<TransactionReceipt> add(Utf8String _serial, Utf8String _pubkey, Utf8String _name) {
        Function function = new Function("add", Arrays.<Type>asList(_serial, _pubkey, _name), Collections.<TypeReference<?>>emptyList());
        return executeTransactionAsync(function);
    }

    public void add(Utf8String _serial, Utf8String _pubkey, Utf8String _name, TransactionSucCallback callback) {
        Function function = new Function("add", Arrays.<Type>asList(_serial, _pubkey, _name), Collections.<TypeReference<?>>emptyList());
        executeTransactionAsync(function, callback);
    }

    public static Future<CAAction> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialWeiValue, Address _systemproxy) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(_systemproxy));
        if(EncryptType.encryptType == 1) setBinary(getGuomiBinary());
        return deployAsync(CAAction.class, web3j, credentials, gasPrice, gasLimit, BINARY, encodedConstructor, initialWeiValue);
    }

    public static Future<CAAction> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialWeiValue, Address _systemproxy) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(_systemproxy));
        if(EncryptType.encryptType == 1) setBinary(getGuomiBinary());
        return deployAsync(CAAction.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, encodedConstructor, initialWeiValue);
    }

    public static CAAction load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new CAAction(contractAddress, web3j, credentials, gasPrice, gasLimit, false);
    }

    public static CAAction load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new CAAction(contractAddress, web3j, transactionManager, gasPrice, gasLimit, false);
    }

    public static CAAction loadByName(String contractName, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new CAAction(contractName, web3j, credentials, gasPrice, gasLimit, true);
    }

    public static CAAction loadByName(String contractName, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new CAAction(contractName, web3j, transactionManager, gasPrice, gasLimit, true);
    }

    public static void setBinary(String binary) {
        BINARY = binary;
    }

    public static String getGuomiBinary() {
        return GUOMI_BINARY;
    }

    public static class LogMessageEventResponse {
        public Address addr;

        public Uint256 code;

        public Utf8String msg;
    }
}
